﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using WriteLog;
using System.Configuration;
using TakeConsole;

namespace TestWriteLog
{
    class Program
    {
        static void Main(string[] args)
        {
            ///查看本Demo的前提：
            ///1、本Demo是为日志记录的。
            ///2、本日志记录程序可以接管Console的输出，并记录日志
            ///3、请先查看app.config中的配置信息

            #region 接管控制台输出消息，并记录到日志

            ///调用前可以用一个TextWriter类型的变量承载Console的输出
            ///以便随后获取回来
            TextWriter CurrentWriter = Console.Out;

            ///在代码中实例一个TakeConsoleWriter后
            ///当前应用程序域中的所有Console.WriteLine方法的输出都会以日志的方式记录
            ///不会影响显示
            TakeConsoleWriter sw = new TakeConsoleWriter();
            ///可以通过Console.SetOut(CurrentWriter)，取消控制台输出的日志记录
            ///可以通过TakeConsoleWriter.Stop()取消控制台输出的日志记录
            ///在取消控制台输出接管后可以通过TakeConsoleWriter.Start()方法继续接管
            Console.WriteLine("这条信息将被记录到日志。{0}",DateTime.Now);
            sw.Stop();
            Console.WriteLine("这条信息不会被记录到日志。{0}", DateTime.Now);
            sw.Start();
            Console.WriteLine("这条信息将被记录到日志。{0}", DateTime.Now);

            #endregion

            Log.Console("这是表示控制台输出的日志项(不会回显)。");

            Log.Normal("这是一个普通日志项");
            Log.Normal("日志记录Demo程序", 100, "测试", "这是一个普通日志项");

            Log.Messages("这是一个消息日志项");
            Log.Messages("日志记录Demo程序", 100, "测试", "这是一个消息日志项");

            Log.Bug("这是一个错误日志项");
            try
            {
                int i = int.Parse("abcde");
            }
            catch (Exception e)
            {
                ///这里可以将异常信息以日志的方式记录
                Log.Bug(e);
            }
            Log.Bug("日志记录Demo程序", 100, "测试", "这是一个错误日志项");


            Log.Warning("这是一个警告日志项");
            Log.Warning("日志记录Demo程序", 100, "测试", "这是一个警告日志项");

            Log.Auth("这是一个认证通过日志项");
            Log.Auth("日志记录Demo程序", 100, "测试", "这是一个认证通过日志项");

            Log.AuthWrong("这是一个认证通过日志项");
            Log.AuthWrong("日志记录Demo程序", 100, "测试", "这是一个认证通过日志项");

            BaseLogMessage blm = new BaseLogMessage();
            blm.Level = LogLevel.Bug;
            blm.Provider = "测试应用程序";
            blm.EventID = 100;
            blm.TaskName = "自定义";
            blm.MessageBody = "自定义的日志项";
            Log.BaseLog(blm);

            Console.ReadKey();
        }

    }
 
}
